package test0302;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 给定两个集合 A 和 B，编写函数实现 A 和 B 的笛卡尔积
 * 输入：集合 A 元素为字符
 *      集合 B 元素为自然数
 * 输出：A 和 B 的笛卡尔积
 */
@SuppressWarnings("all")
public class Main03 {

    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            List<Character> collectionA = new ArrayList<>(); // 集合A
            List<Integer> collectionB = new ArrayList<>(); // 集合B
            System.out.println("请输入集合A, 元素依次以空格分隔(均为字符): ");
            String inputA = scanner.nextLine();
            System.out.println("请输入集合B, 元素依次以空格分隔(均为自然数): ");
            String inputB = scanner.nextLine();
            initCollection(inputA, inputB, collectionA, collectionB);
            List<String> ret = cartesianProduct(collectionA, collectionB);
            System.out.println("集合 A 和 B 的笛卡尔积为:\n" + ret);
        }
    }

    // 用于初始化集合A和集合B
    private static void initCollection(String inputA, String inputB, List<Character> collectionA, List<Integer> collectionB) {
        String[] splitA = inputA.split(" ");
        for (String s : splitA) {
            collectionA.add(s.charAt(0));
        }
        String[] splitB = inputB.split(" ");
        for (String s : splitB) {
            collectionB.add(Integer.valueOf(s));
        }
    }

    // 用于计算笛卡尔积
    public static List<String> cartesianProduct(List<Character> A, List<Integer> B){
        List<String> cartesian = new ArrayList<>(); // 要返回的笛卡尔积
        for (Character itemA : A) {
            for (Integer itemB: B) {
                StringBuilder ret = new StringBuilder();
                ret.append("(" + itemA + ", " + itemB + ")");
                cartesian.add(ret.toString());
            }
        }
        return cartesian;
    }
}
